// src/utils/axios.js

import axios from 'axios';
import {ElMessage} from 'element-plus';
import router from "@/router/index.js";

export const BaseUrl = 'https://211.149.167.244:11988/rsgl';
// 创建 axios 实例
const instance = axios.create({
    baseURL: BaseUrl, // 基础 URL
    timeout: 5000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json', // 默认的请求头
    },
});

// 请求拦截器
instance.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么，可以添加 token 等信息
        const token = localStorage.getItem('token');
        if (token) {
            // config.headers.set('access-token', token)
            config.headers['access-token'] = token
        }
        return config;
    },
    error => {
        // 请求错误时的处理
        return Promise.reject(error);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    response => {
        // 解析返回的数据
        const {code, message, data} = response.data;

        // 如果 code 为 0，表示成功，返回 data
        if (code === 200) {
            // ElMessage.success(message);
            return {code, data};
        }

        // // 如果 code 为 401 或 403，表示未登录，跳转到登录页面
        // if (code === 401 || code === 403) {
        //     ElMessage.error(message);
        //     router.push({path: '/login', query: {param: '1'}});
        //     return;
        // }

        // 如果 code 不为 200，抛出错误并返回错误信息
        // const error = new Error(message || '请求失败');
        ElMessage.error(message || '请求失败');
        // error.code = code;
        // throw error;
    },
    error => {
        // 处理响应错误
        if (error.response) {
            // 如果是 401 错误（未授权），可以进行特殊处理
            if (error.response.status === 401 || error.response.status === 403) {
                // 弹出错误信息
                ElMessage.error('请先登录');
                // 重定向到登录路由
                router.push({name: 'login'});
            }
        }
        return Promise.reject(error);
    }
);

// 封装常用请求方法
const apiRequest = (method, url, data = {}, config = {}) => {
    switch (method.toUpperCase()) {
        case 'GET':
            return instance.get(url, {params: data, ...config});
        case 'POST':
            return instance.post(url, data, config);
        case 'PUT':
            return instance.put(url, data, config);
        case 'DELETE':
            return instance.delete(url, {data, ...config});
        default:
            throw new Error('不支持的请求方法');
    }
};

// 导出请求方法
export {apiRequest};

// 各种请求方法的简化接口
const api = {
    get: (url, data, config) => apiRequest('GET', url, data, config),
    post: (url, data, config) => apiRequest('POST', url, data, config),
    put: (url, data, config) => apiRequest('PUT', url, data, config),
    delete: (url, data, config) => apiRequest('DELETE', url, data, config),
};

export default api;
